]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
StThemeNode: handle url() in inline styles better
authorRay Strode <rstrode@redhat.com>
Wed, 8 Dec 2010 23:05:31 +0000 (18:05 -0500)
committerRay Strode <rstrode@redhat.com>
Mon, 13 Dec 2010 16:48:36 +0000 (11:48 -0500)
non-absolute paths specified as url()'s in
stylesheets are resolved to be relative to the location
of the stylesheets they are in.

Inline styles don't have physical styleshseets sitting on disk,
which leads to a crash in the url resolving code.

This commit ensures that we don't try to use the stylesheet associated
with a url, if there isn't one to use.

This commit doesn't try to handle relative paths in inline styles.
It only prevents crashes when absolute paths are used.

https://bugzilla.gnome.org/show_bug.cgi?id=636975

src/st/st-theme-node.c

index ce4cdbe9e77883786340ef4214ca192fb99f2e45..4a6a1218ddbcaacaec74948971f494e419d5f61a 100644 (file)
@@ -1617,9 +1617,16 @@ _st_theme_node_ensure_background (StThemeNode *node)
                 }
               else if (term->type == TERM_URI)
                 {
+                  CRStyleSheet *base_stylesheet;
+
+                  if (decl->parent_statement != NULL)
+                    base_stylesheet = decl->parent_statement->parent_sheet;
+                  else
+                    base_stylesheet = NULL;
+
                   node->background_image = _st_theme_resolve_url (node->theme,
-                                                                     decl->parent_statement->parent_sheet,
-                                                                     term->content.str->stryng->str);
+                                                                  base_stylesheet,
+                                                                  term->content.str->stryng->str);
                 }
             }
         }
@@ -1669,9 +1676,16 @@ _st_theme_node_ensure_background (StThemeNode *node)
 
           if (decl->value->type == TERM_URI)
             {
+              CRStyleSheet *base_stylesheet;
+
+              if (decl->parent_statement != NULL)
+                base_stylesheet = decl->parent_statement->parent_sheet;
+              else
+                base_stylesheet = NULL;
+
               g_free (node->background_image);
               node->background_image = _st_theme_resolve_url (node->theme,
-                                                              decl->parent_statement->parent_sheet,
+                                                              base_stylesheet,
                                                               decl->value->content.str->stryng->str);
             }
           else if (term_is_inherit (decl->value))
@@ -2455,6 +2469,7 @@ st_theme_node_get_border_image (StThemeNode *node)
       if (strcmp (decl->property->stryng->str, "border-image") == 0)
         {
           CRTerm *term = decl->value;
+          CRStyleSheet *base_stylesheet;
           int borders[4];
           int n_borders = 0;
           int i;
@@ -2529,7 +2544,12 @@ st_theme_node_get_border_image (StThemeNode *node)
               break;
             }
 
-          filename = _st_theme_resolve_url (node->theme, decl->parent_statement->parent_sheet, url);
+          if (decl->parent_statement != NULL)
+            base_stylesheet = decl->parent_statement->parent_sheet;
+          else
+            base_stylesheet = NULL;
+
+          filename = _st_theme_resolve_url (node->theme, base_stylesheet, url);
           if (filename == NULL)
             goto next_property;